name: Clippy Dev Test

on:
  push:
    branches:
      - auto
      - try
  pull_request:
    # Only run on paths, that get checked by the clippy_dev tool
    paths:
    - 'CHANGELOG.md'
    - 'README.md'
    - '**.stderr'
    - '**.rs'

env:
  RUST_BACKTRACE: 1
  CARGO_INCREMENTAL: 0

jobs:
  clippy_dev:
    runs-on: ubuntu-latest

    steps:
    # Setup
    - name: Checkout
      uses: actions/checkout@v4

    # Run
    - name: Build
      run: cargo build --features deny-warnings
      working-directory: clippy_dev

    - name: Test update_lints
      run: cargo dev update_lints --check

    - name: Test fmt
      run: cargo dev fmt --check

    - name: Test cargo dev new lint
      run: |
        cargo dev new_lint --name new_early_pass --pass early
        cargo dev new_lint --name new_late_pass --pass late
        cargo check
        git reset --hard HEAD

  # These jobs doesn't actually test anything, but they're only used to tell
  # bors the build completed, as there is no practical way to detect when a
  # workflow is successful listening to webhooks only.
  #
  # ALL THE PREVIOUS JOBS NEED TO BE ADDED TO THE `needs` SECTION OF THIS JOB!

  end-success:
    name: bors dev test finished
    if: github.event.pusher.name == 'bors' && success()
    runs-on: ubuntu-latest
    needs: [clippy_dev]

    steps:
      - name: Mark the job as successful
        run: exit 0

  end-failure:
    name: bors dev test finished
    if: github.event.pusher.name == 'bors' && (failure() || cancelled())
    runs-on: ubuntu-latest
    needs: [clippy_dev]

    steps:
      - name: Mark the job as a failure
        run: exit 1
